home *** CD-ROM | disk | FTP | other *** search
- /*
- File: MemHooks.h
-
- Contains: Memory manager hook classes for debugging
-
- Owned by: Michael Burbidge
- Owned by: Jens Alfke
-
- Copyright: © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <6> 8/4/95 DM Leak checking [1267956]
- <5> 5/4/95 jpa Added AboutToAllocate.
- <4> 10/24/94 jpa Constness [1194286].
- <3> 9/14/94 jpa Eliminated dependencies on rest of OpenDoc.
- [1186692]
- <2> 8/8/94 jpa Added private BasicAboutToFree
- <1> 7/26/94 jpa first checked in
- To Do:
-
- */
-
-
- #ifndef _MEMHOOKS_
- #define _MEMHOOKS_
-
- #if MM_DEBUG
-
- #ifndef _MEMORYHE_
- #include "MemoryHe.h"
- #endif
-
-
- //==============================================================================
- // CBlockCushionHook - A debugging memory hook which places a prefix and a
- // suffix on each block. When the block is freed both are
- // validated to make sure they have not been overwritten.
- //
- // Block format: PPPPXXXXPPPP...SSSS where XXXX is the
- // block size.
- //
- //==============================================================================
-
- class CBlockCushionHook : public ODMemoryHook
- {
- public:
- CBlockCushionHook();
- virtual ~CBlockCushionHook();
-
- virtual ODBlockSize GetHeaderSize();
-
- virtual ODBlockSize AboutToAllocate(ODBlockSize size) const;
- virtual void* DidAllocate(void* blk, ODBlockSize);
- virtual const void* AboutToBlockSize(const void* blk);
- virtual void* AboutToFree(void* blk);
- virtual void AboutToRealloc(void*& , ODBlockSize&);
- virtual void* DidRealloc(void* oldBlk, void* blk, ODBlockSize);
-
- private:
- unsigned long* BasicAboutToFree(void* blk, MMBoolean zap);
-
- enum { kPrefixCushionLength = 3 * sizeof(unsigned long),
- kSuffixCushionLength = sizeof(unsigned long) };
- enum { kPrefixCushionMagicNumber = 'PPPP',
- kSuffixCushionMagicNumber = 'SSSS' };
- };
-
-
- //==============================================================================
- // CBlockStackCrawlHook - A debugging memory hook that tags every block with the
- // stack crawl as of the time it was created.
- //==============================================================================
-
- class StackCrawl;
-
- class CBlockStackCrawlHook : public ODMemoryHook
- {
- public:
- virtual ODBlockSize GetHeaderSize();
-
- virtual ODBlockSize AboutToAllocate(ODBlockSize size) const;
- virtual void* DidAllocate(void* blk, ODBlockSize);
- virtual const void* AboutToBlockSize(const void* blk);
- virtual void* AboutToFree(void* blk);
- virtual void AboutToRealloc(void*& , ODBlockSize&);
- virtual void* DidRealloc(void* oldBlk, void* blk, ODBlockSize);
- virtual long GetType( ) const;
- enum{ kBlockStackCrawlHookType = 1 };
-
- StackCrawl* GetStackCrawl( const void *blk ) const;
- void SetStackCrawl( const void *blk, StackCrawl* );
-
- static MMBoolean gTrack;
-
- private:
- void* BasicAboutToFree(void* blk, MMBoolean zap);
- };
-
-
- #endif /*MM_DEBUG*/
-
- #endif /*_MEMHOOKS_*/